/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tk.eigh.ksvg.component.text;

import ksvg.text.TextContent;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;

/**
 *
 * @author nt
 */
@JSFComponent(name = "svg:TextPath",
type = "tk.eigh.svg.TextPath",
family = "text.TextPath",
clazz = "ksvg.text.TextPath",
tagClass = "ksvg.text.tags.TextPathTag",
defaultRendererType = "SVGTextPathRenderer",
desc = "In addition to text drawn in a straight line, SVG also includes the ability to place text along the shape of a ‘path’ element. To specify that a block of text is to be rendered along the shape of a ‘path’, include the given text within a ‘textPath’ element which includes an ‘xlink:href’ attribute with an IRI reference to a ‘path’ element.")
public abstract class AbstractTextPath extends TextContent {

    /**
     * startOffset = "&lt;length&gt;"
     *<br/>
     * An offset from the start of the ‘path’ for the initial current text
     * position, calculated using the user agent's distance along the path
     * algorithm. If a &lt;length&gt; other than a percentage is given, then the
     * ‘startOffset’ represents a distance along the path measured in the
     * current user coordinate system. If a percentage is given, then the
     * ‘startOffset’ represents a percentage distance along the entire path.
     * Thus, startOffset="0%" indicates the start point of the ‘path’ and
     * startOffset="100%" indicates the end point of the ‘path’.
     *<br/>
     * If the attribute is not specified, the effect is as if a value of "0"
     * were specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract String getStartOffset();

    /**
     * method = "align | stretch"
     *<br/>
     * Indicates the method by which text should be rendered along the path. A
     * value of align indicates that the glyphs should be rendered using simple
     * 2x3 transformations such that there is no stretching/warping of the
     * glyphs. Typically, supplemental rotation, scaling and translation
     * transformations are done for each glyph to be rendered. As a result, with
     * align, fonts where the glyphs are designed to be connected (e.g., cursive
     * fonts), the connections may not align properly when text is rendered
     * along a path. A value of stretch indicates that the glyph outlines will
     * be converted into paths, and then all end points and control points will
     * be adjusted to be along the perpendicular vectors from the path, thereby
     * stretching and possibly warping the glyphs. With this approach, connected
     * glyphs, such as in cursive scripts, will maintain their connections. If
     * the attribute is not specified, the effect is as if a value of align were
     * specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract String getMethod();

    /**
     * spacing = "auto | exact"
     *<br/>
     * Indicates how the user agent should determine the spacing between glyphs
     * that are to be rendered along a path. A value of exact indicates that the
     * glyphs should be rendered exactly according to the spacing rules as
     * specified in Text on a path layout rules. A value of auto indicates that
     * the user agent should use text-on-a-path layout algorithms to adjust the
     * spacing between glyphs in order to achieve visually appealing results. If
     * the attribute is not specified, the effect is as if a value of exact were
     * specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract String getSpacing();

    /**
     * xlink:href = "&lt;iri&gt;"
     *<br/>
     * An IRI reference to the ‘path’ element onto which the glyphs will be
     * rendered. If &lt;iri&gt; is an invalid reference (e.g., no such element exists,
     * or the referenced element is not a ‘path’), then the ‘textPath’ element
     * is in error and its entire contents shall not be rendered by the user
     * agent.
     *<br/>
     * Animatable: yes.
     *<br/>
     */
    @JSFProperty
    public abstract String getXlinkHref();
}